import { app } from 'electron';
import path from 'path';
import fs from 'fs';
import { SqlBuilder, TableBuilder } from './sqlbuilder';
import Database from 'better-sqlite3';

// 获取用户数据目录
const userDataPath = app.getPath('userData');
const dbPath = path.join(userDataPath, 'markdown-editor.db');

// 确保数据库目录存在
if (!fs.existsSync(path.dirname(dbPath))) {
  fs.mkdirSync(path.dirname(dbPath), { recursive: true });
}

// 创建数据库连接
const db = new Database(dbPath);

// 初始化数据库
export function initDatabase() {
  // 创建笔记本表
  createNotebooksTable();
  
  // 创建笔记表
  createNotesTable();
  
  // 创建标签表
  createTagsTable();
  
  // 创建笔记标签关系表
  createNoteTagsTable();

  // 创建设置表
  createSettingsTable();

  // 创建同步配置表
  createSyncConfigTable();
}

// 创建笔记本表
function createNotebooksTable() {
  const tableBuilder = TableBuilder.create('notebooks')
    .ifNotExist()
    .text('id', { primaryKey: true })
    .text('parent_id', { notNull: false })
    .text('name', { notNull: true })
    .text('description', { notNull: false })
    .integer('order_index', { notNull: true, defaultValue: 0 })
    .text('created_at', { notNull: true, defaultValue: 'CURRENT_TIMESTAMP' })
    .text('updated_at', { notNull: true, defaultValue: 'CURRENT_TIMESTAMP' })
    .integer('is_deleted', { notNull: true, defaultValue: 0 })
    .text('sync_id', { notNull: false })
    .integer('sync_status', { notNull: true, defaultValue: 0 }) // 0: 未同步, 1: 已同步, 2: 待同步, 3: 同步失败
    .text('sync_time', { notNull: false });

  const result = tableBuilder.build();
  db.exec(result.sql);
}

// 创建笔记表
function createNotesTable() {
  const tableBuilder = TableBuilder.create('notes')
    .ifNotExist()
    .text('id', { primaryKey: true })
    .text('notebook_id', { notNull: true })
    .text('title', { notNull: true })
    .text('content', { notNull: true })
    .text('preview', { notNull: false })
    .text('created_at', { notNull: true, defaultValue: 'CURRENT_TIMESTAMP' })
    .text('updated_at', { notNull: true, defaultValue: 'CURRENT_TIMESTAMP' })
    .integer('is_deleted', { notNull: true, defaultValue: 0 })
    .text('sync_id', { notNull: false })
    .integer('sync_status', { notNull: true, defaultValue: 0 }) // 0: 未同步, 1: 已同步, 2: 待同步, 3: 同步失败
    .text('sync_time', { notNull: false });

  const result = tableBuilder.build();
  db.exec(result.sql);
}

// 创建标签表
function createTagsTable() {
  const tableBuilder = TableBuilder.create('tags')
    .ifNotExist()
    .text('id', { primaryKey: true })
    .text('name', { notNull: true })
    .text('color', { notNull: true, defaultValue: '#000000' })
    .text('created_at', { notNull: true, defaultValue: 'CURRENT_TIMESTAMP' })
    .text('updated_at', { notNull: true, defaultValue: 'CURRENT_TIMESTAMP' })
    .integer('is_deleted', { notNull: true, defaultValue: 0 })
    .text('sync_id', { notNull: false })
    .integer('sync_status', { notNull: true, defaultValue: 0 })
    .text('sync_time', { notNull: false });

  const result = tableBuilder.build();
  db.exec(result.sql);
}

// 创建笔记标签关系表
function createNoteTagsTable() {
  const builder = TableBuilder.create('note_tags')
    .index(['note_id', 'tag_id'], {unique: true})
    .ifNotExist()
    .text('note_id', { notNull: true })
    .text('tag_id', { notNull: true })
    .text('created_at', { notNull: true, defaultValue: 'CURRENT_TIMESTAMP' })
    .integer('is_deleted', { notNull: true, defaultValue: 0 })
    .text('sync_id', { notNull: false })
    .integer('sync_status', { notNull: true, defaultValue: 0 })
    .text('sync_time', { notNull: false });

  // 添加复合主键
  const sql = builder.build().sql;
  db.exec(sql);
}

// 创建设置表
function createSettingsTable() {
  const tableBuilder = TableBuilder.create('settings')
    .ifNotExist()
    .text('key', { primaryKey: true })
    .text('value', { notNull: true })
    .text('updated_at', { notNull: true, defaultValue: 'CURRENT_TIMESTAMP' });

  const result = tableBuilder.build();
  db.exec(result.sql);

  // 初始化默认设置
  const defaultSettings = [
    { key: 'theme', value: 'system' }, // system, light, dark
    { key: 'editor_mode', value: 'wysiwyg' }, // wysiwyg, source, split
    { key: 'font_size', value: '14' },
    { key: 'line_height', value: '1.6' },
    { key: 'auto_save', value: '1' },
    { key: 'show_line_numbers', value: '1' },
    { key: 'sync_enabled', value: '0' },
  ];

  const settingsSql = SqlBuilder.forEntity('settings');
  
  // 插入默认设置
  for (const setting of defaultSettings) {
    const existingSetting = db.prepare('SELECT * FROM settings WHERE key = ?').get(setting.key);
    if (!existingSetting) {
      const insertQuery = settingsSql.insert(setting).build();
      db.prepare(insertQuery.sql).run(insertQuery.params);
    }
  }
}

// 创建同步配置表
function createSyncConfigTable() {
  const tableBuilder = TableBuilder.create('sync_config')
    .ifNotExist()
    .integer('id', { primaryKey: true, autoIncrement: true })
    .text('provider', { notNull: true }) // onedrive, custom
    .text('name', { notNull: true })
    .integer('is_active', { notNull: true, defaultValue: 0 })
    .text('config', { notNull: true }) // JSON格式的配置数据
    .text('last_sync_time', { notNull: false })
    .text('created_at', { notNull: true, defaultValue: 'CURRENT_TIMESTAMP' })
    .text('updated_at', { notNull: true, defaultValue: 'CURRENT_TIMESTAMP' });

  const result = tableBuilder.build();
  db.exec(result.sql);
}

// 导出数据库连接
export { db };
